
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何使用Linux的cgroups和namespaces来实现容器化应用的资源隔离？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何使用Linux的cgroups和namespaces来实现容器化应用的资源隔离？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在Linux容器化技术中，cgroups 和 namespaces 的核心作用分别是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">cgroups (控制组) 主要负责对进程组的资源使用进行限制、记录和隔离，即控制进程能“用多少”资源（如CPU、内存）。而 namespaces (命名空间) 则提供环境隔离，让进程拥有独立的系统视图，即决定进程能“看到什么”（如独立的进程ID、网络栈、文件系统）。</div>
          </div>
          <div class="card-source">来源: 文档中「1. cgroups（Control Groups）」和「2. namespaces」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">根据文档，cgroups 主要具备哪三大功能来管理系统资源？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">cgroups 的三大主要功能是：1. 资源限制：限制进程组的CPU、内存、磁盘I/O和网络带宽等资源使用。 2. 资源优先级：设置资源优先级，确保高优先级进程组获得更多资源。 3. 监控：记录和监控资源使用情况，便于分析和优化。</div>
          </div>
          <div class="card-source">来源: 1. cgroups（Control Groups） > 主要功能</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中提到了哪些常用的 cgroups 子系统，它们分别用于控制什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到的常用子系统包括：`cpu`（限制CPU使用率）、`memory`（限制内存使用量）、`blkio`（控制块设备的I/O）和 `net_cls`（为网络流量分配分类）。</div>
          </div>
          <div class="card-source">来源: 1. cgroups（Control Groups） > 常用的子系统</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">什么是 PID namespace，它如何为容器实现进程隔离？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">PID namespace 是一种用于隔离进程ID的命名空间。它使得每个 namespace 内的进程可以拥有自己独立的进程ID视图。例如，一个容器内的第一个进程的ID可以是1，而这与宿主系统的1号进程是完全隔离的。</div>
          </div>
          <div class="card-source">来源: 2. namespaces > 主要类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">除了进程ID (PID) 和网络 (NET)，namespaces 还能隔离哪些系统资源？请列举至少三种。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">除了隔离进程ID（PID）和网络（NET），namespaces 还可以隔离：文件系统挂载（MNT namespace）、主机名和域名（UTS namespace）、进程间通信资源（IPC namespace）以及用户和组ID（USER namespace）。</div>
          </div>
          <div class="card-source">来源: 2. namespaces > 主要类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">在容器化环境中，启动一个被完全隔离和资源受限的容器，其典型的工作流程是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">典型工作流程分为三步：1. 初始化 namespaces：为容器创建独立的 PID、NET、MNT 等命名空间以实现环境隔离。2. 应用 cgroups：创建 cgroup 来限制容器的 CPU、内存等资源，并将容器进程加入其中。3. 启动容器：在配置好的 namespaces 中运行容器进程，使其受到 cgroups 的资源限制。</div>
          </div>
          <div class="card-source">来源: 结合使用 cgroups 和 namespaces > 容器化的工作流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">为什么说 cgroups 和 namespaces 是容器化应用资源隔离的核心技术？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为它们共同提供了资源管理和环境隔离的基础。`namespaces` 负责隔离容器的“视图”，让容器感觉自己在一个独立的系统中运行；而 `cgroups` 负责限制容器可以使用的“资源”量。这种结合使得多个容器可以在同一台物理主机上并行运行而不会互相干扰。</div>
          </div>
          <div class="card-source">来源: 文档开篇及「结合使用 cgroups 和 namespaces」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">NET namespace 的主要作用是什么？它能为容器提供什么能力？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">NET namespace 用于隔离网络资源。它能让每个 namespace 拥有自己独立的网络接口、IP 地址和路由表。这意味着在一个 NET namespace 内运行的容器可以拥有自己独立的网络协议栈，与宿主机或其他容器的网络环境完全隔离。</div>
          </div>
          <div class="card-source">来源: 2. namespaces > 主要类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">像 Docker 这样的容器引擎是如何利用 cgroups 和 namespaces 来实现容器管理的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">容器引擎（如 Docker）会自动为容器配置适当的 namespaces 和 cgroups。当用户运行一个容器时，引擎会自动为该容器创建独立的 namespaces（如网络、文件系统、进程等）并设置 cgroups 来限制其资源使用，从而自动化地实现了容器的资源管理和环境隔离功能。</div>
          </div>
          <div class="card-source">来源: 结合使用 cgroups 和 namespaces > 示例</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
